const path = require('path')
function resolve(dir) {
  return path.join(__dirname, dir)
}

// 基础代理的配置
const config = require('./src/config/settings')
const baseProxyURL = config.axios.baseURL
const baseProxy = {}
baseProxy[baseProxyURL] = {
  target: config.axios.serverURL,
  ws: false,
  changeOrigin: true,
  // logLevel: 'debug',
  pathRewrite: {}
}
baseProxy[baseProxyURL].pathRewrite['^' + baseProxyURL] = ''

module.exports = {
  // 配置项目名称
  publicPath: process.env.BASE_URL,
  // 构建时的输出目录
  outputDir: 'dist',
  // 放置静态资源的目录
  assetsDir: 'static',
  // 文件名哈希
  filenameHashing: true,
  transpileDependencies: true,


  configureWebpack: {
    resolve: {
      alias: {
        '@$': resolve('src')
      }
    }
  },

  chainWebpack: (config) => {
    // 配置全局用'@'指代src目录
    config.resolve.alias
      .set('@$', resolve('src'))
      .set('public$', resolve('public'))
      .set('vue-i18n', 'vue-i18n/dist/vue-i18n.cjs.js')
    // 关闭预加载
    config.plugins.delete('prefetch')

    // 配置svg-sprite-loader
    config.module
      .rule('svg')
      // .exclude.add(resolve('src/icons')) // resolve配置解析模块 exclude匹配资源
      .exclude.add(resolve('src/assets/icons')) // resolve配置解析模块 exclude匹配资源
      .end()
    // config.module.rules.delete('svg'); // 重点:删除默认配置中处理svg
    config.module
      // .rule('svg-sprite-loader')
      .rule('icons')
      .test(/\.svg$/)
      // .include.add(resolve('src/icons')) // 处理svg目录
      .include.add(resolve('src/assets/icons')) // 处理svg目录
      .end()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: 'icon-[name]',
      })
      .end();
  },

  css: {
    loaderOptions: {
      less: {
        lessOptions: {
          modifyVars: {
            '@primary-color': '#1890ff', // 全局主色
            '@link-color': '#1890ff', // 链接色
            '@success-color': '#52c41a', // 成功色
            '@warning-color': '#faad14', // 警告色
            '@error-color': '#f5222d', // 错误色
            '@font-size-base': '14px', // 主字号
            '@heading-color': 'rgba(0, 0, 0, 0.85)', // 标题色
            '@text-color': 'rgba(0, 0, 0, 0.65)', // 主文本色
            '@text-color-secondary': 'rgba(0, 0, 0, 0.45)', // 次文本色
            '@disabled-color': 'rgba(0, 0, 0, 0.25)', // 失效色
            '@border-radius-base': '4px', // 组件/浮层圆角
            '@border-color-base': '#d9d9d9', // 边框色
            '@box-shadow-base': '0 2px 8px rgba(0, 0, 0, 0.15)' // 浮层阴影
          },
          javascriptEnabled: true
        },
        javascriptEnabled: true
      },
    }
  },

  devServer: {
    // 需要服务的文件夹，false为不启用服务。(boolean string array)
    // contentBase: false,
    // 指定使用的ip地址，默认为localhost，如果使用'0.0.0.0'则可以被外部访问。
    // host: '0.0.0.0',
    // 修改项目端口号
    port: 8001,
    // 是否对所有请求启用gzip压缩。
    compress: true,
    // 是否开启HMR
    // hot: true,
    // 启用HMR，当编译失败时，不刷新页面。
    // hotOnly: true,
    // 设置浏览器自动打开
    // open: true,
    // 默认情况下dev-server使用http协议，通过配置可以支持https。
    // https: {
    //   cacert: './server.pem',
    //   pfx: './server.pfx',
    //   key: './server.key',
    //   cert: './server.crt',
    //   passphrase: 'webpack-dev-server',
    //   requestCert: true
    // },
    // 是否开启HTTP/2。
    // http2: true,
    // 在浏览器上全屏显示编译的errors或warnings。默认是关闭的:false, 如果只想显示编译错误:true,如果既想显示erros也想显示warnings:{ warnings: true, errors:true }
    // overlay: { warnings: true, errors:true },
    // 当启用该配置，除了初始化信息会被写到控制台中，其他任何信息都不会被写进去。errors和warnings也不会被写到控制台中。
    // quiet: true,
    // 该配置项允许配置从目录提供静态文件的选项（默认是 'public' 文件夹）。将其设置为 false 以禁用。
    // static: ['assets', 'css'],
    // 为所有响应添加 headers，跨域配置。
    headers: {
      'Access-Control-Allow-Origin': '*'
    },
    // 代理配置
    proxy: {
      // core服务配置
      '/api-gateway/core': {
        target: 'http://127.0.0.1:9001',
        ws: false,
        changeOrigin: true,
        pathRewrite: {
          '^/api-gateway': ''
        }
      },
      // Apifox的mock代理
      '/api-gateway/mock': {
        target: 'http://127.0.0.1:4523',
        ws: false,
        changeOrigin: true,
        pathRewrite: {
          '^/api-gateway': ''
        }
      },
      '/api-gateway/demo': {
        target: 'http://www.demo.com', // 服务器的接口地址
        ws: false, // 是不是webSocket连接
        changeOrigin: true, // 是否跨域请求
        // logLevel: 'debug', // 日志级别
        pathRewrite: { // 地址重写
          '^/api-gateway': ''
        }
      },
      ...baseProxy
    }
  }
}
